from django.db import models

# Create your models here
# 导入 Django 内置的 models 模块 —— 所有模型都继承自 models.Model
from django.db import models
 
# 定义一个设备模型类，对应数据库中的一张表（默认表名：devices_device）
class Device(models.Model):
    # 字段 1：设备类型（下拉选择）
    # 定义一个“选项列表”，格式为 (值, 显示名)
    DEVICE_TYPES = [
        ('laptop', '笔记本'),
        ('phone', '手机'),
        ('network', '网络设备'),
        ('monitor', '显示器'),
        ('other', '其他'),
    ]
    
    # 字段 2：设备名称
    # CharField = 可变长度字符串，max_length 必填（数据库 VARCHAR）
    name = models.CharField(
        '设备名称',      # verbose_name：后台显示的字段名（中文）
        max_length=100   # 最大长度 100 字符
    )
 
    # 字段 3：设备类型（下拉框）
    # 使用 choices 参数绑定上面的 DEVICE_TYPES
    device_type = models.CharField(
        '设备类型',
        max_length=20,           # 足够存 'laptop'/'network' 等值
        choices=DEVICE_TYPES     # 绑定选项，Admin 会自动生成下拉框
    )
 
    # 字段 4：购买日期
    # DateField = 日期类型（不含时间），对应数据库 DATE 类型
    purchase_date = models.DateField('购买日期')
 
    # 字段 5：是否在保
    # BooleanField = 布尔值（True/False），Admin 显示为复选框
    under_warranty = models.BooleanField(
        '是否在保',
        default=True    # 默认值为 True（勾选）
    )
 
    # 字段 6：备注
    # TextField = 长文本，适合多行输入（如备注、描述）
    # blank=True → 表单可为空
    # null=True → 数据库可存 NULL（一般 TextField 建议加）
    notes = models.TextField(
        '备注',
        blank=True,     # 表单验证允许空
        null=True       # 数据库允许 NULL
    )
 
    # 定义对象的字符串表示（影响 Admin 显示）
    # 如果不写，默认显示 "Device object (1)"，非常不友好
    def __str__(self):
        return self.name  # 显示设备名称，如 "MacBook Pro 2023"
    
    # Meta 类：定义模型的元数据（非字段信息）
    class Meta:
        verbose_name = '设备'          # 单数名（用于 Admin 单条记录）
        verbose_name_plural = '设备列表' # 复数名（用于 Admin 菜单）
        ordering = ['-purchase_date']   # 默认按购买日期倒序排列
